监测和诊断eRDMA

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

对eRDMA进行监测和诊断可以帮助您及时发现和解决问题,确保系统安全,并有效管理和优化系统资源。本文主要介绍几种可用于eRDMA监测的工具和方法,以便您对eRDMA的运行状态进行监控。

前提条件

待监测实例已安装和部署eRDMA。具体操作,请参见ECS实例使能eRDMA

使用云监控监测eRDMA的运行状态

您可以通过阿里云的云监控产品来监测eRDMA的运行状态,您也可以根据自己的监控需求对相应的监控数据进行加工、监控或者告警。详细信息,请参见自定义监控

查看eRDMA支持的监控指标项

  1. 登录云监控控制台

  2. 在指标列表搜索框中输入eri,可以筛选出当前eRDMA支持的监控指标。

    image

使用eadm工具进行eRDMA故障诊断和排查

eadm是eRDMA驱动程序默认自动部署的一个用户态的管理工具,无需手动安装,它是自研的ECS内部的诊断与实时监测工具,便于在遇到故障时快速进行定位。eadm工具的主要功能包括:

  • 流量监控问题辅助诊断等功能:整个设备的实时流量统计功能。

  • 配置的查询与设置功能:包括delay ack功能的配置、拥塞控制算法CC(Congestion Control)的配置等。

以下主要针对eadm工具常见的命令做说明,其他命令可以参考eadm工具的使用帮助(通过eadm -h命令获取帮助)。

警告

本工具仅用于诊断与调试,工具未来可能发生变化,并不保证命令在任何情况/场景下均可用。

  • 查看eadm命令的帮助信息

    eadm -h

    image

  • 实时监测eRDMA设备的实时流量信息

    eRDMA设备的驱动版本在0.2.34及以后,均支持流量的监控统计功能。

    eadm stat -d <ibdev_name> -l

    其中<ibdev_name>是指待查询的eRDMA设备名称(通过ibv_devinfo命令查询),您需要根据实际环境替换。如果环境中仅有一个eRDMA设备,-d <ibdev_name>参数可省略。

    image

  • 获取eRDMA设备的统计信息(例如cm和verebs消息的计数、流量计数等)

    eadm stat -d <ibdev_name>

    其中<ibdev_name>是指待查询的eRDMA设备名称(通过ibv_devinfo命令查询),您需要根据实际环境替换。如果环境中仅有一个eRDMA设备,-d <ibdev_name>参数可省略。

    image

  • 获取当前eRDMA驱动的版本信息

    eadm ver
说明

其余命令,例如infodumpconf等,会有使用方面的约束限制,不建议您自行使用。

使用iproute2监控和诊断eRDMA

iproute2是一套用于配置和管理Linux网络的工具集,它提供了一系列的命令行工具(如ip、ss等),用于网络接口、路由表和流量控制等方面的管理和配置,还可以帮助管理员快速定位和解决网络连接问题,其自带的rdma命令可以对RDMA子系统做一些相应的监控和诊断。

说明

大多数Linux发行版在较新的版本中通常已默认安装iproute2,如Alibaba Cloud Linux 3、Ubuntu20及以上等,具体情况请参阅相应操作系统官方文档。

  • 查询当前eRDMA设备的状态信息

    rdma link

    image

  • 查询eRDMA设备当前资源使用情况(如CQ数、QP数、MR数等)

    说明

    在RDMA网络通信中,QP(Queue Pair)、CQ(Completion Queue)、MR(Memory Region)和verbs Opcode是几个核心的组件,它们在RDMA通信中扮演着重要的角色,共同确保了RDMA网络通信的高效性和低延迟性。

    详细信息,请参见弹性RDMA的基础能力和规格

    rdma res

    image

  • 查询eRDMA设备的性能统计信息(例如连接次数、连接状态、发送/接收的数据包数量等)

    rdma -p stat

    image

使用diagnose进行eRDMA的故障诊断和性能评估

diagnose诊断工具支持eRDMA基础功能检测、eRDMA HPC环境检测和eRDMA基础延迟检测,可以帮助您更好地使用eRDMA。

diagnose检测可能存在以下几种结果

  • PASS:通过当前检测。

  • SKIP:当前系统版本不支持该检测,跳过该检测。

  • FAIL:相应检测工具未安装或检测失败,检测命令会在fail info中列出。

  • 其他INFO信息:eRDMA相关配置信息,如安装模式、驱动版本以及CC算法等。

安装diagnose

在已配置eRDMA的实例上,执行以下命令,获取diagnose工具。

  • 从内网地址获取

    wget http://mirrors.cloud.aliyuncs.com/erdma/tools/diagnose.py
  • 从公网地址获取

    wget https://mirrors.aliyun.com/erdma/tools/diagnose.py

diagnose工具使用方法

python diagnose.py -h

image

eRDMA基础功能诊断

您可以通过diagnose进行eRDMA的基础功能诊断测试,包括驱动是否正确安装、网络连通性是否正确、eRDMA内核驱动的安装模式等,以确保 eRDMA 功能可以正常运行并发挥其高吞吐量和低延迟的优势。

eRDMA基础功能诊断项说明

检测项

说明

期望输出

异常输出及解决方案

erdma device

eRDMA设备是否存在

PASS

FAIL:可能是您在购买实例时,没有选中eRDMA功能或者没有添加带有eRDMA功能的辅助网卡。如何购买或者使能eRDMA,请参见ECS实例使能eRDMA

erdma installed

是否正确安装eRDMA驱动

PASS

FAIL未正确安装驱动。请确认您在配置eRDMA过程中的驱动安装步骤是否正确,或者尝试重新安装驱动。具体操作,请参见为ECS实例安装eRDMA驱动

erdma loaded

是否正确加载eRDMA驱动

PASS

FAIL未正确加载驱动,可能发生在安装完驱动但是尚未重启主机的阶段。请尝试通过modprobe erdma命令解决该问题。

ibverbs loaded

是否正确加载ib_verbs驱动

PASS

FAIL请尝试通过modprobe ib_uverbs命令解决该问题。

erdma tools

检测eRDMA相关工具是否安装

PASS

FAIL通过eadm|rdma|ibv_devinfo命令判断哪些工具缺失,这些工具通常会随eRDMA驱动一同安装,请确认您在配置eRDMA过程中的驱动安装步骤是否正确,或者尝试重新安装驱动。具体操作,请参见为ECS实例安装eRDMA驱动

hca detected

用户态驱动是否正确检测eRDMA设备

PASS

FAIL该问题是由于erdma deviceerdma installederdma loadedibverbs loaded检测项未满足导致,请确认eRDMA驱动已安装并正确加载。

hca active

是否使能当前设备

PASS

FAIL该问题是由于eRDMA设备对应的ENI设备没有变为running状态。这种情况可能出现在某些较旧版本的内核中,需要先通过dhclient -v ethx命令将对应的eth设备使能后,再检查eRDMA设备是否处于ACTIVE状态。具体操作,请参见验证eRDMA配置的正确性

erdma stats

eRDMA设备是否存在错误计数

PASS

  • SKIP:可能是因为操作系统不支持rdma stat命令。

  • FAIL:可能是出现了某些错误的计数。在寻求技术支持时,建议带上rdma -p stat命令的输出结果。

network config

网络连通性是否正常

PASS

FAIL:一般是由于当前有多个网卡的IP地址在同一个子网内,会导致某些场景下eRDMA功能异常。

erdma dmesg

是否存在eRDMA相关内核告警

PASS

FAIL:内核出现eRDMA相关告警。您可以检查相关的告警错误,并尝试重新加载驱动解决。

atomic support

eRDMA设备是否支持RDMA ATOMIC操作

PASS

FAIL:当前eRDMA设备不支持RDMA ATOMIC操作。如您不需要使用RDMA ATOMIC操作,请忽略该报错。

说明

ATOMIC操作指的是一种对内存进行原子级别操作的功能,它可以保证操作的完整性和一致性,仅适用于部分应用场景。如果您不需要使用,请忽略相关报错。

go-back-n support

eRDMA设备是否支持Go-back-N功能

PASS

  • SKIP:可能是当前eRDMA设备不支持查询Go-back-N配置信息。

  • FAIL:可能是未正确安装eadm工具或当前eRDMA设备不支持Go-back-N功能。

说明

Go-back-N为eRDMA扩展功能,仅适用于部分应用场景。如果您不需要使用,请忽略相关报错。

erdma install mode

eRDMA内核驱动安装模式

  • Standard:标准模式,仅支持RDMA_CM建链。

  • Compat:兼容模式,支持RDMA_CM和OOB建链。

    重要

FAIL:未查询到eRDMA内核驱动安装模式,该问题可能是由于前述erdma loaded检测项未满足导致,请尝试重新安装eRDMA驱动。具体操作,请参见为ECS实例安装eRDMA驱动

kernel driver version

eRDMA内核驱动版本

eRDMA当前的内核驱动版本,例如0.2.37

FAIL:未查询到eRDMA内核态驱动版本。可能是由于erdma loadederdma tools检测项未满足导致,请确认eRDMA驱动已安装并正确加载。具体操作,请参见验证eRDMA配置的正确性

rdma-core version

eRDMA用户态驱动版本

eRDMA用户态驱动版本,例如44.1-2

FAIL:未查询到eRDMA用户态驱动版本。可能是未正确安装eRDMA用户态驱动,请尝试重新安装eRDMA驱动。具体操作,请参见为ECS实例安装eRDMA驱动

cc algorithm

eRDMA当前使用的CC算法

eRDMA CC算法,例如hpcc_rtt

FAIL:未查询到当前eRDMA CC算法。可能是由于erdma loadederdma tools检测项未满足导致,请确认eRDMA驱动已安装并正确加载。

具体操作如下所示:

  1. 远程登录已配置eRDMA的实例。

    具体操作,请参见使用Workbench工具以SSH协议登录Linux实例

  2. 执行以下命令,获取diagnose工具。

    • 从内网地址获取

      wget http://mirrors.cloud.aliyuncs.com/erdma/tools/diagnose.py
    • 从公网地址获取

      wget https://mirrors.aliyun.com/erdma/tools/diagnose.py
  3. 执行以下命令,检测eRDMA基础功能。

    python diagnose.py -d

    结果如下所示,可以看到本示例中测试项结果。关于诊断项说明,请参见eRDMA基础功能诊断项说明

    image

eRDMA HPC环境诊断

如果您需要在eRDMA的环境下运行HPC应用,您可能需要安装一些额外的依赖和配置,diagnose工具提供eRDMA HPC环境依赖项检测功能。

eRDMA HPC环境检测依赖项说明

当前eRDMA HPC环境依赖项检测主要包括当前eRDMA使用的CC算法、是否开启Go-back-N、DAPL 1.0和DAPL 2.0相关检测。如您不需要使用相关依赖项,请忽略相关报错,比如您只需要使用DAPL 2.0,那么请忽略DAPL 1.0相关报错。

检测项

说明

期望输出

异常输出及解决方式

cc algorithm

eRDMA当前使用的CC算法

eRDMA CC算法,例如hpcc_rtt

FAIL:未查询到当前eRDMA CC算法,可能是未正确安装eadm工具或当前eadm工具不支持查询eRDMA CC算法。

go-back-n support

eRDMA设备是否支持Go-back-N功能

PASS

  • SKIP:可能是当前eRDMA设备不支持查询Go-back-N配置信息。

  • FAIL:可能是未正确安装eadm工具或当前eRDMA设备不支持Go-back-N功能。

该特性缺失可能会对HPC类型应用产生影响。如您不需要,请忽略该报错。

dapl1 install

是否正确安装dapl1

PASS

FAIL:dapl1相关共享库或配置文件不存在,请检查当前dapl1是否正确安装。如果您不需要dapl1,请忽略该报错。

dapl1 config

是否在dapl1配置文件中配置eRDMA

PASS

FAIL:未在dapl1配置文件中检测到eRDMA相关配置,请检查当前dapl1配置文件并加入eRDMA相关配置。如果您不需要dapl1,请忽略该报错。

dapl2 install

是否正确安装dapl2

PASS

FAIL:dapl2相关共享库或配置文件不存在,请检查当前dapl2是否正确安装。如果您不需要dapl2,请忽略该报错。

dapl2 config

是否在dapl2配置文件中配置eRDMA

PASS

FAIL:未在dapl2配置文件中检测到eRDMA相关配置,请检查当前dapl2配置文件并加入eRDMA相关配置。如果您不需要dapl2,请忽略该报错。

dapl2 test

是否正常运行dapl2 dtest

PASS

FAIL:运行dtest失败,可能是未正确安装或配置dapl2。

具体操作如下所示:

  1. 远程登录已配置eRDMA的实例。

    具体操作,请参见使用Workbench工具以SSH协议登录Linux实例

  2. 执行以下命令,获取diagnose工具。

    • 从内网地址获取

      wget http://mirrors.cloud.aliyuncs.com/erdma/tools/diagnose.py
    • 从公网地址获取

      wget https://mirrors.aliyun.com/erdma/tools/diagnose.py
  3. 执行如下命令,检测eRDMA HPC环境依赖项。

    python diagnose.py --hpc-check

    正常情况下,执行上述检测命令的输出结果如下。关于诊断项说明,请参见eRDMA HPC环境检测依赖项说明

    image.png

eRDMA网络性能评估

您可以使用diagnose的perftest功能进行不同实例之间的网络性能测试。

  • 前提条件

    在执行检测之前,您需要确保:

    • 已在所有待检测节点上正确安装和部署eRDMA。具体操作,请参见ECS实例使能eRDMA

    • 已配置所有待检测节点之间可通过SSH免密连接。具体操作,请参见配置SSH免密登录

    • 已在所有待检测节点上安装Python paramiko依赖包。

      说明
      • diagnose利用paramiko实现远程连接。

      • 您可以参考如下命令安装Python paramiko依赖包。如果您对Python版本没有要求,推荐您默认使用Python3以减少配置工作量。

      Alibaba Cloud Linux/Centos

      # python3
      sudo python3 -m pip install --upgrade pip
      sudo python3 -m pip install paramiko 
      # python2
      # 如果当前python2未安装pip模块,请安装python2-pip
      sudo yum -y install python2-pip
      sudo python2 -m pip install --upgrade pip==20.3.4
      sudo python2 -m pip install paramiko 

      Ubuntu

      # python3
      sudo python3 -m pip install --upgrade pip
      sudo python3 -m pip install paramiko
      # python2
      # 如果当前节点未安装python2-pip
      sudo apt install software-properties-common
      sudo add-apt-repository universe
      sudo apt update
      sudo apt install python2
      sudo curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
      sudo python2 get-pip.py
      sudo python2 -m pip install --upgrade pip==20.3.4
      sudo python2 -m pip install paramiko
  • 示例操作

    1. 远程登录已配置eRDMA的实例。

      具体操作,请参见使用Workbench工具以SSH协议登录Linux实例

    2. 执行以下命令,获取diagnose工具。

      • 从内网地址获取

        wget http://mirrors.cloud.aliyuncs.com/erdma/tools/diagnose.py
      • 从公网地址获取

        wget https://mirrors.aliyun.com/erdma/tools/diagnose.py
    3. 执行如下命令,进行eRDMA延迟检测。

      python diagnose.py --perftest --hosts <n1> <n2> --user <username> --key-file </path/to/private_key>

      各参数说明如下:

      • --hosts <n1> <n2>:待检测的各节点,彼此之间通过空格分隔。您需要将<n1> <n2>替换为检测节点上的eRDMA弹性网卡对应的私有IP地址。

      • --user <username>:SSH免密登录用户名,请根据实际环境替换。

      • --key-file </path/to/private_key>:SSH免密登录所使用的私钥文件路径(绝对路径),请根据实际环境替换。

      检测结果示例如下,显示了两台实例之间的网络延迟测试。详细信息,请参见eRDMA网络性能测试

      每个表格展示了不同操作下的延迟情况。表格中的行代表发起请求的一方,列代表响应请求的一方。每个单元格内的数值表示平均延迟(单位为微秒),括号内是第99.9百分位的延迟时间。

      image.png